﻿//#include <stdio.h>
//#include <stdlib.h>
//#include <string.h>
//#include <assert.h>
//#include <time.h>
//void Swap(int* x, int* y) {
//	int t = *x;
//	*x = *y;
//	*y = t;
//}
//void AdjustUp(int* a, int child) {
//	assert(a);
//	int parent = (child - 1) / 2;
//	while (parent >= 0) {
//		if (a[parent] > a[child]) {
//			Swap(a + parent, a + child);
//			child = parent;
//			parent = (child - 1) / 2;
//		}
//		if (a[parent] <= a[child]) {
//			return;
//		}
//	}
//}
//void AdjustDown(int* a, int n, int parent) {
//	assert(a);
//	int child = parent * 2 + 1;
//	while (child < n) {
//		if (child + 1 < n && a[child] > a[child + 1]) {
//			child++;
//		}
//		if (a[child] < a[parent]) {
//			Swap(a + child, a + parent);
//			parent = child;
//			child = parent * 2 + 1;
//		}
//		if (a[child] >= a[parent]) {
//			return;
//		}
//	}
//}
////str是文件的路径
//void CreatData(char* str) {
//	//注意："w"表示以写入方式打开文件并清空文件内容
//	FILE* file = fopen(str, "w");
//	if (file == 0) {
//		perror("fopen");
//		exit(-1);
//	}
//	//造出1000000个数据，也可以造出更多
//	int n = 1000000;
//	srand(time(0));
//	for (int i = 0; i < n; i++) {
//		//造出范围在[1, 1000]的数据
//		int n = (rand() + i) % 1000 + 1;
//		fprintf(file, "%d\n", n);
//	}
//	fclose(file);
//}
//void CreatHeap(char* str, int k) {
//	//建立堆结构并初始化
//	int* a = (int*)malloc(sizeof(int) * k);
//	if (a == 0) {
//		perror("malloc");
//		exit(-1);
//	}
//	memset(a, 0, sizeof(int) * k);
//
//	//先将文件中的前k个数据放到堆中，将其调成小堆
//	FILE* file = fopen(str, "r");
//	if (!file) {
//		perror("fopen");
//		exit(-1);
//	}
//	for (int i = 0; i < k; i++) {
//		fscanf(file, "%d", a + i);
//	}
//	for (int i = (k - 2) / 2; i >= 0; i--) {
//		AdjustDown(a, k, i);
//	}
//
//	//然后遍历文件中剩下数据
//	int x = 0;
//	while (fscanf(file, "%d", &x) != EOF) {
//		if (x > a[0]) {
//			Swap(&x, &a[0]);
//			AdjustDown(a, k, 0);
//		}
//	}
//
//	//输出
//	for (int i = 0; i < k; i++) {
//		fprintf(stdout, "%d ", a[i]);
//	}
//	puts("");
//	free(a);
//	fclose(file);
//}
////删除路径在str中的文件
//void DeleteFile(char* str) {
//	if (remove(str) != 0) {
//		fprintf(stdout, "无法删除文件\n");
//	}
//	else {
//		fprintf(stdout, "文件已删除\n");
//	}
//}
//int main() {
//	//创建巨多数据，将其输出到文件中
//	CreatData("E:\\test.txt");
//
//	//k为100,建立大小为100的小堆，并将文件中最大的前100个数据放入小堆中
//	CreatHeap("E:\\test.txt", 100);
//
//	//删除文件
//	DeleteFile("E:\\test.txt");
//	return 0;
//}

//#include <stdio.h>
//#include <stdlib.h>
//typedef struct Tree {
//	int val;//数据
//	struct Tree* leftchild;//左孩子结点
//	struct Tree* rightchild;//右孩子结点
//}Tree;
//
////前序遍历
//void FrontOrder(struct Tree* root) {
//	//当递归到空结点时退出
//	if (root == NULL) {
//		return;
//	}
//	//输出
//	fprintf(stdout, "%d ", root->val);
//	//递归左子树
//	FrontOrder(root->leftchild);
//	//递归右子树
//	FrontOrder(root->rightchild);
//}
////中序遍历
//void MiddleOrder(struct Tree* root) {
//	//当递归到空结点时退出
//	if (root == NULL) {
//		return;
//	}
//	//递归左子树
//	MiddleOrder(root->leftchild);
//	//输出
//	fprintf(stdout, "%d ", root->val);
//	//递归右子树
//	MiddleOrder(root->rightchild);
//}
////后序遍历
//void RearOrder(struct Tree* root) {
//	//当递归到空结点时退出
//	if (root == NULL) {
//		return;
//	}
//	//递归左子树
//	RearOrder(root->val);
//	//递归右子树
//	RearOrder(root->val);
//	//输出
//	fprintf(stdout, "%d ", root->val);
//}
//
//Tree* CreatNode(int x) {
//	Tree* node = (Tree*)malloc(sizeof(Tree));
//	node->val = x;
//	node->leftchild = 0;
//	node->rightchild = 0;
//	return node;
//}
//int main()
//{
//	//手动构建二叉结构
//	Tree* node1 = CreatNode(1);
//	Tree* node2 = CreatNode(2);
//	Tree* node3 = CreatNode(3);
//	Tree* node4 = CreatNode(4);
//	Tree* node5 = CreatNode(5);
//	Tree* node6 = CreatNode(6);
//	node1->leftchild = node2;
//	node1->rightchild = node4;
//	node2->leftchild = node3;
//	node4->leftchild = node5;
//	node4->rightchild = node6;
//	fprintf(stdout, "%d", TreeSize(node1));
//	return 0;
//}